/*
    常见经典递归过程解析

    前置知识：
    讲解017、020、021、023、036、037
    这些章节都分析过递归，不熟悉的同学可以先熟悉一下

    带路径的递归 vs 不带路径的递归(大部分dp，状态压缩dp认为是路径简化了结构，dp专题后续讲述)
    任何递归都是dfs且非常灵活。回溯这个术语并不重要。

    题目1 : 返回字符串全部子序列，子序列要求去重。时间复杂度O(2^n * n)
    题目2 : 返回数组的所有组合，可以无视元素顺序。时间复杂度O(2^n * n)
    题目3 : 返回没有重复值数组的全部排列。时间复杂度O(n! * n)
    题目4 : 返回可能有重复值数组的全部排列，排列要求去重。时间复杂度O(n! * n)
    题目5 : 用递归逆序一个栈。时间复杂度O(n^2)
    题目6 : 用递归排序一个栈。时间复杂度O(n^2)
    题目7 : 打印n层汉诺塔问题的最优移动轨迹。时间复杂度O(2^n)

*/